package pe.com.rimac.portal.facturacion.servicio;

import java.util.List;

import pe.com.rimac.portal.common.exception.ServiceException;
import pe.com.rimac.portal.facturacion.handler.SearchCriteria;
import pe.com.rimac.portal.facturacion.modelo.Factura;
import pe.com.rimac.portal.facturacion.modelo.Persona;
import pe.com.rimac.portal.service.paperless.model.TipoRetorno;

/**
 * Interfase que declara m&eacute;todos para consultar y actualizar informaci&oacute;n correspondiente a
 * facturaci&oacute;n electr&oacute;nica.
 * 
 * @author Andres Deza Villacorta - Synopsis S.A
 * 
 */
public interface AseguradoService
{
	/**
	 * Obtiene el listado de documentos electr&oacute;nicos en base al criterio de b&uacute;squeda establecido.
	 * 
	 * @param criterioBusqueda
	 * @param request
	 * @return
	 */
	List<Factura> obtenerFacturas(SearchCriteria searchCriteria) throws ServiceException;

	/**
	 * Obtiene la URL de la factura electr&oacute;nica en el formato solicitado.
	 * 
	 * @param factura
	 *            factura seleccionada para exportar.
	 * @param tipoRetorno
	 *            formato de la factura a exportar.
	 * @param username
	 *            usuario autorizado para el export.
	 * @param password
	 *            contrase&ntilde;a del usuario autorizado para el export.
	 * @return
	 * @throws ServiceException
	 */
	String obtenerURLFacturaDigital(Factura factura, TipoRetorno tipoRetorno, String username, String password)
			throws ServiceException;

	/**
	 * Obtiene los datos de facturaci&oacute;n electr&oacute;nica de la persona deseada.
	 * 
	 * @param tipoDocumento
	 *            tipo de documento de la persona
	 * @param numeroDocumento
	 *            n&uacute;mero de documento de la persona
	 * @return
	 * @throws ServiceException
	 */
	Persona obtenerDatosFacturacion(String tipoDocumento, String numeroDocumento) throws ServiceException;

	/**
	 * Realiza la actualizaci&oacute;n de datos de la persona natural o jur&iacute;dica.
	 * 
	 * @param persona
	 *            datos de la persona
	 * @throws ServiceException
	 */
	void actualizarDatosFacturacion(Persona persona) throws ServiceException;
}